package com.cmii.sjw.department.control.jsc.controller;

import cn.hutool.core.util.StrUtil;
import com.cmii.sjw.department.control.jsc.model.dto.ReportActivityDTO;
import com.cmii.sjw.department.control.jsc.model.params.EventReceiverParams;
import com.cmii.sjw.department.control.jsc.model.params.MultiSpanEventReceiverParams;
import com.cmii.sjw.department.control.jsc.service.IJyzzService;
import com.cmii.sjw.department.control.jsc.util.Result;
import com.cmii.sjw.department.control.jsc.util.RsaSignUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 教育智治应用-事件信息查询接口
 *
 * @Author jfh
 * @Date 2024-11-12 周二 16:00
 * @Version 1.0
 */
@Slf4j
@RestController
@CrossOrigin
@RequestMapping("/jyzz")
public class JyzzController {

    @Autowired
    private IJyzzService jyzzService;

    /**
     * 事件数量统计查询
     *
     * @param appCode 事件所属应用
     * @return
     */
    @PostMapping("/total-statistics")
    public Result totalStatistics(String appCode) {
        return jyzzService.totalStatistics(appCode);
    }

    /**
     * 多跨事件列表信息-倒排序
     *
     * @param appCode  事件所属应用
     * @param pageSize 分页页数
     * @param pageNum  当前页数
     * @param zoningCode 区域编码 为空时默认50
     * @return
     */
    @PostMapping("/event-details")
    public Result eventDetails(String appCode, Integer pageSize, Integer pageNum, @RequestParam(defaultValue = "50") String zoningCode) {
        return jyzzService.eventDetails(appCode, pageSize, pageNum,zoningCode);
    }

    /**
     * 多跨事件详情查询接口
     *
     * @param eventType 事件类型 H02571A暴雨、H01131A涉教舆情、720152优待对象入学
     * @param eventNum  事件编号
     * @return
     */
    @PostMapping("/event-info")
    public Result eventInfo(String eventType, String eventNum) {
        log.info("eventType:{},eventNum:{}", eventType, eventNum);
        if (StringUtils.isEmpty(eventType) || StringUtils.isEmpty(eventNum))
            return Result.error("参数错误");

        return jyzzService.eventInfo(eventType, eventNum);
    }

    /**
     * 第三方自闭环事件推送接口
     * @param params 接收参数
     * @return 推送结果
     */
    @PostMapping("/event-receiver")
    public Result eventReceiver(@RequestBody EventReceiverParams params) {
        log.info("params:{}", params);
        return jyzzService.eventReceiver(params);
    }

    /**
     * 第三方多跨事件推送接口
     * @param params 接收参数
     * @return 推送结果
     */
    @PostMapping("/multi-span-event-receiver")
    public Result multiSpanEventReceiver(@RequestBody MultiSpanEventReceiverParams params) {
        log.info("params:{}", params);
        return jyzzService.multiSpanEventReceiver(params);
    }

    /**
     * 高校日活跃度
     */
    @PostMapping("/activity")
    public Result reportActivity(@Validated @RequestBody ReportActivityDTO dto) {
        return jyzzService.sso(dto);
    }

    /**
     * 按事件类型获取绑定角色帐户id
     * @param eventType 事件类型
     * @param belongCounty 所属县
     * @return 绑定角色帐户id
     */
    @PostMapping("/getBindingRoleAccountIdByventType")
    public Result<List<String>> getBindingRoleAccountIdByventType(String eventType, String belongCounty) {
        log.info("按事件类型获取绑定角色帐户id：eventType:{},belongCounty:{}",eventType,belongCounty);
        if (StrUtil.isEmpty(eventType)){
            return Result.error("eventType不能为空");
        }
        if (StrUtil.isEmpty(belongCounty)){
            return Result.error("belongCounty不能为空");
        }
        return jyzzService.getBindingRoleAccountIdByventType(eventType,belongCounty);
    }




    public static void main(String[] args) {
        // 模拟请求参数
        String organizationName = "重庆移通学院";   //单位组织
        String applicationSystemName = "OA系统";       //应用系统
        String authCode = "6cb8635d99194f8ca57b6";     //授权码
        Integer monthActivityUserNum = 502;      //月活用户数
        Integer monthTargetUserNum = 2661;   //目标用户数
        Integer monthDoneEventNum = 1632;    //月办件数

        // 拼接待签名的内容（不含时间戳）
        String signContent = "authCode=" + authCode
                + "&organizationName=" + organizationName
                + "&applicationSystemName=" + applicationSystemName
                + "&monthActivityUserNum=" + monthActivityUserNum
                + "&monthTargetUserNum=" + monthTargetUserNum
                + "&monthDoneEventNum=" + monthDoneEventNum;

        // 打印待签名的内容
        System.out.println("待签名内容: " + signContent);

        // 用私钥生成签名
        String signature = RsaSignUtil.sign(signContent);
        System.out.println("签名（发送给服务端）: " + signature);

        // 验签测试（模拟服务端验签）
        boolean verify = RsaSignUtil.verify(signContent, signature);
        System.out.println(verify ? "✅ 验签成功！" : "❌ 验签失败！");
    }
}
